using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Runtime.CompilerServices;
using Com.Binaria.Core;
using Com.Binaria.Core.Base;
using Com.Binaria.Core.Dto;
using Com.Binaria.Core.Util;
using Com.Binaria.Core.Datos;
using Com.Binaria.SISCOB.DTO;

namespace Com.Binaria.SISCOB.DAO
{
/// <summary>
///	Clase encargada de la gestion de informacion del objeto Conciliacion
/// </summary>
public partial class ConciliacionDAO :IConciliacionDAO 
{
	#region campos privados
    private const String CLASS_PREFIX = "Com.Binaria.SISCOB.DAO.ConciliacionDAO";

	#endregion

    #region constructores
    /// <summary>
    /// constructor por defecto del objeto
    /// </summary>
    public ConciliacionDAO()
    {
	}
    #endregion



	#region metodos privados	
    /// <summary>
    /// metodo que realiza conversion del registro obtenido a dto
    /// </summary>
    /// <param name="dr">registro con informacion del objeto Conciliacion obtenido</param>
    /// <returns>dto conformado en base a la informacion entregada</returns>
    private  ConciliacionDTO Create(IDataReader dr)
    {
        ConciliacionDTO vObj = new ConciliacionDTO();

        try
        {
			if (!(dr["Id"] is System.DBNull))
			{
				vObj.Id = (System.Int32)dr["Id"];		
			}
			if (!(dr["IdCuentaCorriente"] is System.DBNull))
			{
				vObj.IdCuentaCorriente = (System.Int32)dr["IdCuentaCorriente"];		
			}
			if (!(dr["SaldoMayor"] is System.DBNull))
			{
				vObj.SaldoMayor = (System.Int64)dr["SaldoMayor"];		
			}
			if (!(dr["SaldoCuenta"] is System.DBNull))
			{
				vObj.SaldoCuenta = (System.Int64)dr["SaldoCuenta"];		
			}
			if (!(dr["FchDesde"] is System.DBNull))
			{
				vObj.FchDesde = (System.DateTime)dr["FchDesde"];		
			}
			if (!(dr["FchHasta"] is System.DBNull))
			{
				vObj.FchHasta = (System.DateTime)dr["FchHasta"];		
			}
			if (!(dr["FchCreacion"] is System.DBNull))
			{
				vObj.FchCreacion = (System.DateTime)dr["FchCreacion"];		
			}
			if (!(dr["Obs"] is System.DBNull))
			{
				vObj.Obs = (System.String)dr["Obs"];		
			}
			if (!(dr["EstaCerrada"] is System.DBNull))
			{
				vObj.EstaCerrada = (System.Boolean)dr["EstaCerrada"];		
			}
            if (!(dr["UserName"] is System.DBNull))
            {
                vObj.UserName = (System.String)dr["UserName"];
            }
        }
        catch (Exception ex)
        {
            throw new Exception("ERROR_CREATE_DTO", ex);
        }

        return vObj;
    }	
	
    /// <summary>
    /// metodo que realiza conversion de los registros obtenidos a un array de dto
    /// </summary>
    /// <param name="dr">informacion de las registros obtenidos</param>
    /// <param name="p_Conciliacion">objeto en el cual se cargara la informacion</param>
    /// <returns>view dto conformado en base a la informacion entregada</returns>
    private List<ConciliacionDTO> CreateDtos(IDataReader dr)
    {
        List<ConciliacionDTO> listDto = new List<ConciliacionDTO>();
        if (dr != null)
        {
			using (dr)
			{
               while (dr.Read())
               {
                  listDto.Add(Create(dr));
               }
			}
        }

		return listDto;
    }
    #endregion

	#region metodos publicos

	

	///<summary>
	///Metodo que ingresa un registro en la tabla Conciliacion
	///</summary>
	///<param name="ConciliacionDTO"></param>
	///<returns></returns>
	public ConciliacionDTO[] Insert(ConciliacionDTO[] dtos)
	{	
		DatosService servicio= Factoria.ServicioDatos("SISCOB");
		DbParameter[] parameters = servicio.GetParameterCollection(10);

        foreach (ConciliacionDTO dto in dtos)
        {
		
		parameters[0] =  servicio.GetParameter();
		parameters[0].Direction=ParameterDirection.Input;
		parameters[0].ParameterName="@IdCuentaCorriente";
		parameters[0].Value=AssertNull.getValueToBD(dto.IdCuentaCorriente);
		parameters[0].DbType=DbType.Int32;
		
		parameters[1] =  servicio.GetParameter();
		parameters[1].Direction=ParameterDirection.Input;
		parameters[1].ParameterName="@SaldoMayor";
		parameters[1].Value=AssertNull.getValueToBD(dto.SaldoMayor);
		parameters[1].DbType=DbType.Int64;
		
		parameters[2] =  servicio.GetParameter();
		parameters[2].Direction=ParameterDirection.Input;
		parameters[2].ParameterName="@SaldoCuenta";
		parameters[2].Value=AssertNull.getValueToBD(dto.SaldoCuenta);
		parameters[2].DbType=DbType.Int64;
		
		parameters[3] =  servicio.GetParameter();
		parameters[3].Direction=ParameterDirection.Input;
		parameters[3].ParameterName="@FchDesde";
		parameters[3].Value=AssertNull.getValueToBD(dto.FchDesde);
		parameters[3].DbType=DbType.DateTime;
		
		parameters[4] =  servicio.GetParameter();
		parameters[4].Direction=ParameterDirection.Input;
		parameters[4].ParameterName="@FchHasta";
		parameters[4].Value=AssertNull.getValueToBD(dto.FchHasta);
		parameters[4].DbType=DbType.DateTime;
		
		parameters[5] =  servicio.GetParameter();
		parameters[5].Direction=ParameterDirection.Input;
		parameters[5].ParameterName="@FchCreacion";
		parameters[5].Value=AssertNull.getValueToBD(dto.FchCreacion);
		parameters[5].DbType=DbType.DateTime;
		
		parameters[6] =  servicio.GetParameter();
		parameters[6].Direction=ParameterDirection.Input;
		parameters[6].ParameterName="@Obs";
		parameters[6].Value=AssertNull.getValueToBD(dto.Obs);
		parameters[6].DbType=DbType.AnsiString;
		
		parameters[7] =  servicio.GetParameter();
		parameters[7].Direction=ParameterDirection.Input;
		parameters[7].ParameterName="@EstaCerrada";
		parameters[7].Value=AssertNull.getValueToBD(dto.EstaCerrada);
		parameters[7].DbType=DbType.Boolean;

        parameters[8] = servicio.GetParameter();
        parameters[8].Direction = ParameterDirection.Input;
        parameters[8].ParameterName = "@UserName";
        parameters[8].Value = AssertNull.getValueToBD(dto.UserName);
        parameters[8].DbType = DbType.AnsiString;
		
		parameters[9] =  servicio.GetParameter();
		
		parameters[9].Direction=ParameterDirection.Output;
		parameters[9].ParameterName="Id";
		parameters[9].DbType=DbType.Int32;
		
		servicio.ExecuteNonQuery("spag_Conciliacion_Insert",parameters);
		dto.Id = (Int32)parameters[9].Value;
		}
		
		return dtos;
		
	}
	
	///<summary>
	///Metodo que actualiza un registro en la tabla Conciliacion
	///</summary>
	///<param name="ConciliacionDTO"></param>
	///<returns></returns>
	public void Update(ConciliacionDTO[] dtos)
	{
		DatosService servicio= Factoria.ServicioDatos("SISCOB");
		DbParameter[] parameters = servicio.GetParameterCollection(10);

        foreach (ConciliacionDTO dto in dtos)
        {
		
		parameters[0] =  servicio.GetParameter();
		parameters[0].Direction=ParameterDirection.Input;
		parameters[0].ParameterName="@Id";
		parameters[0].Value=AssertNull.getValueToBD(dto.Id);
		parameters[0].DbType=DbType.Int32;
		
		parameters[1] =  servicio.GetParameter();
		parameters[1].Direction=ParameterDirection.Input;
		parameters[1].ParameterName="@IdCuentaCorriente";
		parameters[1].Value=AssertNull.getValueToBD(dto.IdCuentaCorriente);
		parameters[1].DbType=DbType.Int32;
		
		parameters[2] =  servicio.GetParameter();
		parameters[2].Direction=ParameterDirection.Input;
		parameters[2].ParameterName="@SaldoMayor";
		parameters[2].Value=AssertNull.getValueToBD(dto.SaldoMayor);
		parameters[2].DbType=DbType.Int64;
		
		parameters[3] =  servicio.GetParameter();
		parameters[3].Direction=ParameterDirection.Input;
		parameters[3].ParameterName="@SaldoCuenta";
		parameters[3].Value=AssertNull.getValueToBD(dto.SaldoCuenta);
		parameters[3].DbType=DbType.Int64;
		
		parameters[4] =  servicio.GetParameter();
		parameters[4].Direction=ParameterDirection.Input;
		parameters[4].ParameterName="@FchDesde";
		parameters[4].Value=AssertNull.getValueToBD(dto.FchDesde);
		parameters[4].DbType=DbType.DateTime;
		
		parameters[5] =  servicio.GetParameter();
		parameters[5].Direction=ParameterDirection.Input;
		parameters[5].ParameterName="@FchHasta";
		parameters[5].Value=AssertNull.getValueToBD(dto.FchHasta);
		parameters[5].DbType=DbType.DateTime;
		
		parameters[6] =  servicio.GetParameter();
		parameters[6].Direction=ParameterDirection.Input;
		parameters[6].ParameterName="@FchCreacion";
		parameters[6].Value=AssertNull.getValueToBD(dto.FchCreacion);
		parameters[6].DbType=DbType.DateTime;
		
		parameters[7] =  servicio.GetParameter();
		parameters[7].Direction=ParameterDirection.Input;
		parameters[7].ParameterName="@Obs";
		parameters[7].Value=AssertNull.getValueToBD(dto.Obs);
		parameters[7].DbType=DbType.AnsiString;
		
		parameters[8] =  servicio.GetParameter();
		parameters[8].Direction=ParameterDirection.Input;
		parameters[8].ParameterName="@EstaCerrada";
		parameters[8].Value=AssertNull.getValueToBD(dto.EstaCerrada);
		parameters[8].DbType=DbType.Boolean;

        parameters[9] = servicio.GetParameter();
        parameters[9].Direction = ParameterDirection.Input;
        parameters[9].ParameterName = "@UserName";
        parameters[9].Value = AssertNull.getValueToBD(dto.UserName);
        parameters[9].DbType = DbType.AnsiString;

        servicio.ExecuteNonQuery("spag_Conciliacion_Update", parameters);
		}
		
		
	}
	
	
	///<summary>
	///Metodo que elimina un registro en la tabla Conciliacion
	///</summary>
	///<param name="ConciliacionDTO"></param>
	///<returns></returns>
	public void Delete(Int32[] idConciliacions)
	{
		DatosService servicio= Factoria.ServicioDatos("SISCOB");
		DbParameter[] parameters = servicio.GetParameterCollection(1);

		foreach (Int32 idConciliacion in idConciliacions)
        {
		
		   parameters[0] =  servicio.GetParameter();
		   parameters[0].Direction=ParameterDirection.Input;
		   parameters[0].ParameterName="@Id";
		   parameters[0].Value=idConciliacion;
		   parameters[0].DbType=DbType.Int32;
		
		   servicio.ExecuteNonQuery("spag_Conciliacion_Delete",parameters);
		}


	}
	
	///<summary>
	///Metodo que obtiene un registro en la tabla Conciliacion por su ID
 	///</summary>
	///<param name="ConciliacionDTO"></param>
	///<returns></returns>
	public ConciliacionDTO GetByID(Int32 idConciliacion)
	{
		DatosService servicio= Factoria.ServicioDatos("SISCOB");
		DbParameter[] parameters = servicio.GetParameterCollection(1);
		parameters[0] =  servicio.GetParameter();
		parameters[0].Direction=ParameterDirection.Input;
		parameters[0].ParameterName="@Id";
		parameters[0].Value=idConciliacion;
		parameters[0].DbType=DbType.Int32;
		
		IDataReader reader = servicio.ExecuteReader("spag_Conciliacion_GetByID",parameters);
		List<ConciliacionDTO> list= CreateDtos(reader);
		if (list.Count>0)
		{
				return list[0];
		}
		else
		{
			return null;
		}
	}
	
	///<summary>
	///Metodo que obtinen todos los registro en la tabla Conciliacion
	///</summary>
	///<param name="ConciliacionDTO"></param>
	///<returns></returns>
	public List<ConciliacionDTO> GetAll()
	{
		DatosService servicio= Factoria.ServicioDatos("SISCOB");
		DbParameter[] parameters = servicio.GetParameterCollection(0);

		IDataReader reader = servicio.ExecuteReader("spag_Conciliacion_GetAll",parameters);
		List<ConciliacionDTO> lista= CreateDtos(reader);
		
		
        return lista;
	}
	
	///<summary>
	///Metodo que obtinen todos los registro en la tabla Conciliacion que coincidan
	///con los campos de busqueda provistos por el dto (ConciliacionDTO
	///</summary>
	///<param name="ConciliacionDTO"></param>
	///<returns></returns>
	public List<ConciliacionDTO> Find(ConciliacionDTO dtoin)
	{
		ConciliacionDTO dto= ((ConciliacionDTO)dtoin);
		DatosService servicio= Factoria.ServicioDatos("SISCOB");
		DbParameter[] parameters = servicio.GetParameterCollection(10);
		
		parameters[0] = servicio.GetParameter();
		parameters[0].Direction=ParameterDirection.Input;
		parameters[0].ParameterName="@Id";
		parameters[0].Value=AssertNull.getValueToBD(dto.Id);
		parameters[0].DbType=DbType.Int32;
		
		parameters[1] = servicio.GetParameter();
		parameters[1].Direction=ParameterDirection.Input;
		parameters[1].ParameterName="@IdCuentaCorriente";
		parameters[1].Value=AssertNull.getValueToBD(dto.IdCuentaCorriente);
		parameters[1].DbType=DbType.Int32;
		
		parameters[2] = servicio.GetParameter();
		parameters[2].Direction=ParameterDirection.Input;
		parameters[2].ParameterName="@SaldoMayor";
		parameters[2].Value=AssertNull.getValueToBD(dto.SaldoMayor);
		parameters[2].DbType=DbType.Int64;
		
		parameters[3] = servicio.GetParameter();
		parameters[3].Direction=ParameterDirection.Input;
		parameters[3].ParameterName="@SaldoCuenta";
		parameters[3].Value=AssertNull.getValueToBD(dto.SaldoCuenta);
		parameters[3].DbType=DbType.Int64;
		
		parameters[4] = servicio.GetParameter();
		parameters[4].Direction=ParameterDirection.Input;
		parameters[4].ParameterName="@FchDesde";
		parameters[4].Value=AssertNull.getValueToBD(dto.FchDesde);
		parameters[4].DbType=DbType.DateTime;
		
		parameters[5] = servicio.GetParameter();
		parameters[5].Direction=ParameterDirection.Input;
		parameters[5].ParameterName="@FchHasta";
		parameters[5].Value=AssertNull.getValueToBD(dto.FchHasta);
		parameters[5].DbType=DbType.DateTime;
		
		parameters[6] = servicio.GetParameter();
		parameters[6].Direction=ParameterDirection.Input;
		parameters[6].ParameterName="@FchCreacion";
		parameters[6].Value=AssertNull.getValueToBD(dto.FchCreacion);
		parameters[6].DbType=DbType.DateTime;
		
		parameters[7] = servicio.GetParameter();
		parameters[7].Direction=ParameterDirection.Input;
		parameters[7].ParameterName="@Obs";
		parameters[7].Value=AssertNull.getValueToBD(dto.Obs);
		parameters[7].DbType=DbType.AnsiString;
		
		parameters[8] = servicio.GetParameter();
		parameters[8].Direction=ParameterDirection.Input;
		parameters[8].ParameterName="@EstaCerrada";
		parameters[8].Value=AssertNull.getValueToBD(dto.EstaCerrada);
		parameters[8].DbType=DbType.Boolean;

        parameters[9] = servicio.GetParameter();
        parameters[9].Direction = ParameterDirection.Input;
        parameters[9].ParameterName = "@UserName";
        parameters[9].Value = AssertNull.getValueToBD(dto.UserName);
        parameters[9].DbType = DbType.AnsiString;

		
		IDataReader reader = servicio.ExecuteReader("spag_Conciliacion_Find",parameters);
		List<ConciliacionDTO> lista= CreateDtos(reader);
		
        return lista;
	}


	#endregion
	}//End class ConciliacionDAO
}//End namespace



